草庐IT

C++ 对和指针

全部标签

c++ - C++ 中的结构偏移量和指针安全

这个问题是关于使用带结构偏移量的指针算法派生的指针。考虑以下程序:#include#include#includestructA{floata;doubleb;intc;};staticconstexprautooff_c=offsetof(A,c);intmain(){A*a=newA{0.0f,0.0,5};char*a_storage=reinterpret_cast(a);int*c=reinterpret_cast(a_storage+off_c));std::cout这个程序似乎可以在我测试的编译器上运行并给出预期的结果,使用默认设置和C++11标准。(一个密切相关的程序,

c++ - vector in struct 耗时吗?使用指针更好吗?

我在C++中有一个这样的结构:structMyStruct{someTypev1;someType2v2;someType3v3;someType4f1();std::vectormyVector;};它会经常以这样的形式使用://someprocess...afterwhichastd::vectorvec1isgeneratedMyStructmyStruct;myStruct.myVector=vec1;由于vec1比较大。我想知道通过执行分配myStruct.myVector=vec1;是否花费很多时间我是否应该在MyStruct中使用指向myVector的指针来使其更快?如何

c++ - 什么是资源或指针的所有权?

表达“资源的所有权”是什么意思?它与拥有指针的所有权一样吗?例如在thisanswer,使用了表达式“PODscannotexpressownershipofpointersorresources”。涉及动态内存管理的类,它们是否表示指针或资源的所有权? 最佳答案 我不认为有一个普遍接受的、100%准确且始终适用的定义,但是我在C++上下文中遇到过的最有用的所有权定义(以及在general)负责清理。也就是说,资源的所有者是负责正确清理该资源的人。“资源”和“清理”的含义取决于上下文。当资源是通过new动态分配的内存时,清理正在调用

c++ - 为什么我们在定义指针时使用 "type * var"而不是 "type & var"?

我是C++的新手(断断续续有大约一年的经验)。我很好奇是什么导致决定将type*name作为定义指针的语法。在我看来,语法应该是type&name因为&符号在代码中的其他任何地方都使用来引用变量的内存地址。因此,使用int指针的传统示例:inta=1;int*b=&a;会变成inta=1;int&b=&a我确信这其中有一些我没有看到的原因,我很想听听C++老手的一些意见。谢谢,-S 最佳答案 C++采用了C语法。正如“TheDevelopmentoftheCLanguage”(DennisRitchie着)中所揭示的那样,C在类型声

c++ - 将指针从 C 传递到程序集

我想在我的C/C++程序中使用“_test_and_setlock”汇编语言实现和原子交换汇编指令。classLockImpl{public:staticvoidlockResource(DWORDresourceLock){__asm{InUseLoop:moveax,0;0=InUsexchgeax,resourceLockcmpeax,0jeInUseLoop}}staticvoidunLockResource(DWORDresourceLock){__asm{movresourceLock,1}}};这有效,但这里有一个错误。问题是我想传递DWORD*resourceLock而

c++ - C/C++指针问题

tl;dr-您能否扩展下面第一个代码片段中的4条评论?deref具体是什么意思我是一名资深Java开发人员,希望学习C++。我遇到了thiswebsite针对我这种情况的开发人员。intx,*p,*q;p=newint;cin>>x;if(x>0)q=&x;*q=3;//1.derefofpossiblyuninitializedptrqq=p;p=newint;//2.potentialstorageleak(ifx!=0this//memorywillnotbereturnedtofreestorage)*p=5;deleteq;*q=1;//3.derefofdeletedptr

C++:指针和作用域

int*test(){inta=5;int*b=&a;returnb;}test的结果会是一个坏指针吗?据我所知a应该被删除然后b会变成一个乱七八糟的指针,对吧?更复杂的东西怎么样,不是一个int指针,而是一个有20个左右成员的类? 最佳答案 您返回的术语是“danglingpointer”。a是分配在栈上的局部变量,一旦超出范围就不再可用(这与垃圾回收完全不同)。尝试使用调用test()的结果将是未定义的行为。另一方面,如果您没有在堆栈上分配a--(int*a=newint(5);),那么int*b=a;returnb;会很好,尽

c++ - 关于从基类到子类指针的向下转型

静态检查工具显示了以下代码的违规行为:classCSplitFrame:publicCFrameWnd...classCVsApp:publicCWinAppCWnd*CVsApp::GetSheetView(LPCSTRWindowText){CWnd*pWnd=reinterpret_cast(m_pMainWnd)->m_OutputBar.GetChildWnd(WindowText);returnpWnd;}错误信息:“CSplitFrame”类继承自“CWnd”类描述:避免向下转换继承层次。此规则检测从基类指针到子类指针的转换。好处:允许向下转换继承层次结构会导致维护问题,

c++ - C++中的字符指针

我对C++中的字符指针有疑问。每当我们在C++中创建一个字符指针时:char*p="Howareyoudoing",p应该包含存储值“你好吗”的内存地址。但是,我对示例代码和输出感到困惑。为什么cout返回整个字符串?它应该给出内存地址的值。其次,为什么cout只给出字符串的第一个字符?代码:#includeusingnamespacestd;intmain(){constchar*str="howareyou\n";inti[]={1,2,3};cout输出:howareyou0xbfac1eb0h 最佳答案 如果你想打印地址,那

c++ - 使用 STL 算法重写的指针的循环示例,没有循环?

例如,我将如何重写下面的代码,使用没有循环的STL算法?vectorpizzaBox;intbiggestSlice=0;for(int*p=&pizzaBox[0];p!=pizzaBox[pizzaBox.size()];p++){if(*p>biggestSlice)biggestSlice=*p;} 最佳答案 假设您实际上是指vector,并在更正循环结束条件后,您可以使用max_element算法在这里:intbiggestSlice=*max_element(pizzaBox.begin(),pizzaBox.end()